package com.changgou.order.listener;

import com.changgou.entity.Constants;
import com.changgou.order.config.RabbitMQConfig;
import com.changgou.order.pojo.Order;
import com.changgou.order.service.OrderService;
import com.changgou.pay.feign.PayFeign;
import org.springframework.amqp.rabbit.annotation.RabbitListener;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.Map;

/**
 * 所有订单的超时处理监听器
 */
@Component
public class AllOrderTimeOutListener {

    @Autowired
    private OrderService orderService;

    @Autowired
    private PayFeign payFeign;

    /**
     * 监听死信队列中, 超时的订单id, 所有订单过了超时时间最终都会超时
     * 这里做超时的业务处理
     * @param orderId
     */
    @RabbitListener(queues = RabbitMQConfig.CANCEL_ORDER_QUEUE)
        public void messageHandler(String orderId) {
            //1. 根据订单id到数据库中查询订单对象
            Order order = orderService.findById(orderId);

            //2. 调用微信查询接口, 查询微信支付状态
            Map wxResultMap = payFeign.queryPay(orderId);

            //3. 如果微信返回的状态是已支付, 我们数据库中订单的状态是未支付, 则需要做支付成功业务补偿处理
            if ("SUCCESS".equals(wxResultMap.get("trade_state"))
                    && Constants.ORDER_STATUS_0.equals(order.getPayStatus())) {

                //调用service中的支付成功业务处理方法处理
                orderService.paySuccess(orderId, String.valueOf(wxResultMap.get("transaction_id")));
            }

            //4. 如果微信返回的状态是未支付, 我们需要做订单超时处理
            if ("NOTPAY".equals(wxResultMap.get("trade_state"))) {
                orderService.payTimeOut(order);
            }


    }
}
